home *** CD-ROM | disk | FTP | other *** search
/ Software 2000 / Software 2000 Volume 1 (Disc 2 of 2).iso / demos / d049.dms / in.adf / sine.cp < prev    next >
Encoding:
Text File  |  1987-05-06  |  5.7 KB  |  474 lines

  1.  
  2.     SECTION mysine,CODE_C
  3.  
  4.  
  5. adr1        =    4    ; wibble speed
  6. adr2        =    8    ; up down speed
  7.  
  8.  
  9.  
  10. ; The EXEC functions used
  11. EXECBASE    =    4
  12.  
  13. FORBID        =    -132
  14. PERMIT        =    -138
  15. OPEN_LIBRARY    =    -408
  16. CLOSE_LIBRARY    =    -414
  17. ALLOCMEM    =    -198
  18. FREEMEM        =    -210
  19.  
  20. ; Custom Chips
  21.  
  22. dmacon        =    $dff096
  23.  
  24.  
  25.  
  26.      move.l EXECBASE,a6    
  27.      jsr FORBID(a6)
  28.  
  29.      lea gfxname(pc),a1        
  30.     jsr OPEN_LIBRARY(a6)
  31.  
  32.  
  33.     move.l d0,a6
  34.     move.l d0,GfxBase
  35.  
  36.     bsr GetMem
  37.  
  38.     MOVE.L bitmaparea,d1
  39.  
  40.     move.w d1,PlaneLo
  41.     swap d1
  42.     move.w d1,PlaneHi
  43.  
  44.     jsr makecopper
  45.     bsr repointCOPPER
  46.  
  47.  
  48.  
  49. again:
  50.     ;move.l #35,d1
  51.  
  52. delay:  cmpi.b #$ff,$dff006
  53.     bne delay
  54.  
  55.     ;dbra d1,delay
  56.  
  57.      bsr scroll
  58.  
  59.  
  60.     bsr putontext
  61.  
  62.  
  63.  
  64.      btst #6,$bfe001
  65.     bne again
  66.  
  67.     bsr resetCOPPER
  68.  
  69.  
  70.     bsr Freememf
  71.  
  72.  
  73.     move.l GfxBase,a1
  74.     move.l EXECBASE,a6
  75.     jsr CLOSE_LIBRARY(a6)
  76.  
  77.     rts
  78.  
  79. GetMem:
  80.     move.l #$65000,chararea
  81.     move.l #$70000,bitmaparea
  82.  
  83.     move.l #$65000,a0
  84.     move.l #$78000,a1
  85. again2:    move.b #0,(a0)+
  86.     cmp.l a1,a0
  87.     bne again2
  88.  
  89.  
  90.     rts
  91.  
  92.  
  93.     move.l EXECBASE,a6
  94.  
  95.     move.l #42*32,d0
  96.     move.l #$10003,d1
  97.     
  98.     jsr ALLOCMEM(a6)
  99.  
  100.     move.l d0,chararea
  101.  
  102.  
  103.     move.l #8000,d0
  104.     move.l #$10003,d1
  105.  
  106.     jsr ALLOCMEM(a6)
  107.  
  108.     move.l d0,bitmaparea
  109.  
  110.  
  111.     rts
  112.     
  113. Freememf:
  114.     rts
  115.     
  116.     move.l EXECBASE,a6
  117.  
  118.     move.l #42*32,d0
  119.     move.l chararea,a1
  120.     jsr FREEMEM(a6)    
  121.  
  122.  
  123.     move.l #8000,d0
  124.     move.l bitmaparea,a1
  125.     jsr FREEMEM(a6)    
  126.  
  127.  
  128.     rts
  129.  
  130.  
  131.  
  132. repointCOPPER:
  133.         move.l    GfxBase,a1
  134.         move.l    $32(a1),oldcopper
  135.         move.w    #$0080,dmacon
  136.         clr.w    $dff088
  137.         move.l    #NewCopper,$32(a1)
  138.         move.w    #$84a0,dmacon
  139.         rts
  140.  
  141. resetCOPPER:
  142.  
  143.         move.w    #$0080,dmacon
  144.         move.l    GfxBase,a0
  145.         move.l    oldcopper,$32(a0)
  146.         move.w    #$84a0,dmacon    
  147.         rts
  148.  
  149. putontext:
  150.     move.l nextsine,a0
  151.  
  152.     move.l a0,a1
  153.     adda.l #adr2,a1            ; Step value through table
  154.                     ; Higher multiples of 2 faster
  155.  
  156.     cmpa.l #endsine,a1
  157.     blt okpot
  158.  
  159.     move.l #sinetab,a1
  160.  
  161. okpot:  move.l a1,nextsine
  162.  
  163.  
  164.  
  165.     move.l #0,d6
  166.     move.l #40,d5
  167.  
  168.  
  169.     move.l chararea,d0
  170.     MOVE.L bitmaparea,d1
  171.  
  172.     addi.l #40*160,d1
  173.  
  174.     move.l #$DFF000,A6
  175.  
  176.     move.w #20-1,d6
  177.  
  178.     move.w #32*64+1,d5
  179.  
  180.  
  181.     ; d1 = destn (middle of screen)
  182.     ; d0 = chararea
  183.  
  184.  
  185.     clr.w $042(A6)
  186.  
  187.  
  188.     move.w #40,$064(A6)        
  189.     move.w #38,$062(a6)        
  190.     move.w #38,$066(a6)
  191.  
  192.     move.l #$dff050,a5
  193.     move.l #$dff054,a4
  194.     move.l #$dff04c,a3
  195.     move.l #$dff058,a2
  196.     move.l #$dff040,a1
  197.     move.l #$dff046,a6
  198.  
  199.  
  200.  
  201. blitloop:
  202.     
  203.     move.l d1,d7
  204.  
  205.     add.w (a0),d7
  206.  
  207.     adda.l #adr1,a0    ; faster sine 
  208.  
  209.     cmpa.l #endsine,a0
  210.     bne oknoendsine
  211.  
  212.     lea sinetab,a0
  213.  
  214. oknoendsine:
  215.  
  216.  
  217.  
  218.  
  219.     move.l d0,(a5)    ; srce 
  220.     move.l d7,(a4)    ; Dest 
  221.  
  222.  
  223.     move.w #$f000,d3
  224.     
  225.     move.w d3,(A6)    ; Set all masks on
  226.  
  227.     MOVE.W #%0000100111110000,(a1)
  228.                 
  229.  
  230.     move.w d5,(a2)
  231.  
  232.  
  233.     move.w #2,d4
  234.  
  235.  
  236.  
  237.     MOVE.W #%0000110111111100,(a1)
  238.         
  239.  
  240. blitloop2:
  241.  
  242.     
  243.     move.l d1,d7
  244.     add.w (a0),d7
  245.     adda.l #adr1,a0    ; Faster Sine
  246.  
  247.  
  248.     cmpa.l #endsine,a0
  249.     blt oknoendsine2
  250.  
  251.     lea sinetab,a0
  252.  
  253. oknoendsine2:
  254.  
  255.     move.l d0,(a5)    ; srce 
  256.     move.l d7,(a3)
  257.     move.l d7,(a4)    ; Dest 
  258.  
  259.  
  260.     ror.w #4,d3
  261.     move.w d3,(A6)    ; Set all masks on
  262.  
  263.     move.w d5,(a2)
  264.  
  265.     dbra d4,blitloop2
  266.  
  267.  
  268.     addq.l #2,d0
  269.     addq.l #2,d1
  270.  
  271.  
  272.     dbra d6,blitloop
  273.  
  274.  
  275.     rts
  276.  
  277.  
  278.     
  279. scroll:
  280.  
  281.  
  282.     move.l #$DFF000,A6
  283.  
  284.     MOVE.L chararea,d0
  285.  
  286.     move.l d0,d1
  287.     addq.l #2,d1        ; a2 points to next word
  288.  
  289.     move.l d1,$50(a6)    ; srce 
  290.     move.l d0,$54(a6)    ; Dest 
  291.  
  292.     clr.w $064(A6)        ; No modulos
  293.     clr.w $066(A6)
  294.  
  295.     move.l #-1,$044(A6)    ; Set all masks on
  296.  
  297.     clr.w $042(A6)
  298.  
  299.     MOVE.W #%1101100111110000,$040(a6)
  300.                 
  301.  
  302.     move.w #32*64+22,$058(a6)
  303.  
  304.  
  305.  
  306.     subq.b #1,charcount
  307.     bne nocharyet
  308.     move.b #5,charcount    
  309.  
  310.  
  311.     move.l textptr,a0
  312.     clr.l d0
  313.     move.b (a0)+,d0
  314.     cmpi.b #0,(a0)
  315.     bne nottextend
  316.  
  317.     move.l #texttab,a0
  318.  
  319. nottextend:
  320.     move.l a0,textptr
  321.     bsr putletter
  322.  
  323. nocharyet:
  324.  
  325.     rts
  326.  
  327.  
  328.  
  329.  
  330.     ; ******************************
  331.     ; * Place letter on the screen *
  332.     ; ******************************        
  333. putletter:
  334.  
  335.  
  336.         lea fontmap,a0
  337.     
  338.         subi.b #32,d0
  339.     
  340. rndagain:    cmpi.b #20,d0        
  341.         blt okputchar
  342.  
  343.         adda.l #40*16,a0    ; Size of 1 line of chs
  344.         subi.b #20,d0
  345.         bra rndagain
  346.  
  347. okputchar:    rol.b #1,d0
  348.         andi.b #$fe,d0
  349.  
  350.     add.l a0,d0
  351.  
  352.  
  353.  
  354.     move.l #$DFF000,A6
  355.  
  356.     move.l chararea,d1
  357.     addi.l #42*8+40,d1
  358.     
  359.  
  360.     move.l d0,$50(a6)
  361.     move.l d1,$54(A6)
  362.  
  363.  
  364.     MOVE.W #38,$064(A6)
  365.     MOVE.W #40,$066(A6)
  366.  
  367.     move.l #-1,$044(A6)    ; Set all masks on
  368.  
  369.     clr.w $042(A6)
  370.  
  371.     MOVE.W #%0000100111110000,$040(a6)
  372.                 
  373.  
  374.     move.w #64*16+1,$058(a6)
  375.  
  376.  
  377.  
  378.     RTS
  379.  
  380.  
  381. gfxname:    dc.b "graphics.library",0
  382.         EVEN
  383. GfxBase:    ds.l 1
  384. bitmaparea:    ds.l 1
  385. chararea:    ds.l 1
  386.  
  387. charcount:    dc.b 16
  388.  
  389.         EVEN
  390.  
  391. oldcopper:    ds.l 1
  392.  
  393.         even
  394.  
  395. NewCopper:
  396.     
  397.  
  398.         dc.w $0100,$1000
  399.         dc.w $0180,0
  400.  
  401.         dc.w $008e,$2c81
  402.         dc.w $0090,$2cc1
  403.         dc.w $0092,$0038
  404.         dc.w $0094,$00d0
  405.  
  406.         dc.w $180,0
  407.         dc.w $182,$fff
  408.  
  409.         dc.w $00e0
  410. PlaneHi:    dc.w $0007
  411.  
  412.         dc.w $00e2
  413. PlaneLo:    dc.w $0000
  414.  
  415. copper:
  416.     ds.b 2100 
  417.  
  418. textptr:    dc.l texttab
  419.     
  420.  
  421. texttab:    dc.b " YYYYYOOOOO MY LATEST WICKED SINE SCROLLY !!!"
  422.         dc.b ' TESTING TESTING 1 2 3 GREETINGS TO EVERYBODY '
  423.         DC.B ' MY FIRST SINEYSCROLL.....'
  424.  
  425.         DC.B 'NOT BAD EH ????? '
  426.         EVEN
  427.         
  428.  
  429. nextsine:    dc.l sinetab
  430.  
  431.  
  432. sinetab:    
  433.  
  434.     dc.w  0,40,80,120,120,160,200,240,280
  435.     dc.w  320,320,360,400,440,440
  436.     dc.w  480,520,560,560,600,600,640,640
  437.      dc.w  680,680,720,720,720,760,760,760,800,800,800,800,800,800,800
  438.      dc.w  800,800,800,800,760,760,760,720,720,720,680,680,640,640
  439.     dc.w 600,600,560,560,520,480,440,440,400,360,320
  440.      dc.w  320,280,240,200,160,120,120,80,40,0,-40,-80,-120
  441.      dc.w -120,-160,-200,-240,-280,-320,-320,-360,-400,-440,-440
  442.      dc.w -480,-520,-560,-560,-600,-600,-640,-640,-680,-680,-720,-720
  443.      dc.w -720,-760,-760,-760,-800,-800,-800,-800,-800,-800,-800,-800
  444.      dc.w -800,-800,-800,-760,-760,-760,-720,-720,-720,-680,-680
  445.      dc.w -640,-640,-600,-600,-560,-560,-520,-480,-440,-440,-400
  446.     dc.w -360,-320,-320,-280,-240,-200,-160,-120,-120,-80,-40 
  447.         
  448.  
  449. endsine:dc.w 0
  450.  
  451. sinesize=endsine-sinetab
  452.  
  453. makecopper:
  454.     lea copper(pc),a0
  455.     move.w #$000f,d0 ;beam
  456.     move.w #$0000,d1 ;colour
  457. loop2:
  458.     move.w d0,(a0)+
  459.     move.w #$fffe,(a0)+
  460.     move.w #$0182,(a0)+
  461.     move.w d1,(a0)+
  462.     cmpi.w #$ff0f,d0
  463.     beq end
  464.     add.w #$0100,d0
  465.     add.w #$0010,d1
  466.     jmp loop2
  467. end:
  468.     move.l #$fffffffe,(a0)+
  469.     rts 
  470.  
  471. fontmap:
  472.         incbin "df1:Font.map"
  473.  
  474.